#ifndef WIDGET_FUNCD_WEATHER_H
#define WIDGET_FUNCD_WEATHER_H

#include <QWidget>
#include <QObject>
#include <QNetworkAccessManager>
#include <QJsonObject>
#include <QList>
#include <QString>
#include <QLabel>
#include <QMainWindow>
#include <QMouseEvent>

#include <QNetworkAccessManager>
#include <QNetworkReply>
#include "weatherdata.h"

//struct ForecastDay {
//    QString date;
//    QString high;
//    QString low;
//    QString week;
//    QString type;
//};


//struct WeatherData {
//    QString city;
//    QString wendu;
//    QList<ForecastDay> forecast;
//};

namespace Ui {
class Widget_funcD_Weather;
}

class Widget_funcD_Weather : public QWidget
{
    Q_OBJECT
    
public:
    explicit Widget_funcD_Weather(QWidget *parent = nullptr);
    ~Widget_funcD_Weather();

public slots:
//    void refreshWeather();

private:
//    void parseResponse(const QByteArray &data);
//    void printWeatherData() const;

//    QNetworkAccessManager *manager;
//    WeatherData currentData;
    Ui::Widget_funcD_Weather *ui;

//    // 定义一个右键菜单
//    QMenu *mExitMenu;

//    // 定义退出行为 - 菜单项
//    QAction *mExitAct;

//    // 窗口移动时，鼠标与窗口左上角的偏移
//    QPoint mOffset;
    // 天气数据
    Today mToday;
    Day mDay[6];

    // 星期和日期需要的 Label
    QList<QLabel *> mWeekList;
    QList<QLabel *> mDateList;

    // 天气和天气图标
    QList<QLabel *> mTypeList;
    QList<QLabel *> mTypeIconList;

    // 天气 和 图标映射关系
    QMap<QString, QString> mTypeMap;

    // 污染指数
   // QList<QLabel *> mAqiList;

    // 风力和风向
    //QList<QLabel *> mFxList;
    //QList<QLabel *> mFlList;

    // Http请求相关
    QNetworkAccessManager *mNetAccessManager;

    // 获取天气数据
    void getWeatherInfo(QString cityName);

    // 解析天气数据
    void parseJson(const QByteArray &byteArray);

    // 更新 UI
    void updateUI();

    // 绘制高低温曲线
    void paintHighCurve();
    void paintLowCurve();
    void update();
public:
    // 重写菜单事件
 //   void contextMenuEvent(QContextMenuEvent *event) override;

//    // 鼠标按下事件
//    void mousePressEvent(QMouseEvent *event) override;

//    // 鼠标移动事件
//    void mouseMoveEvent(QMouseEvent *event) override;

    // 重写父类的 EventFilter 方法, 用于捕获标签的绘制事件
     bool eventFilter(QObject *watched, QEvent *event) override;



private slots:

    // 获取到网络响应调用的槽函数
    void onRelied_slot(QNetworkReply *reply);


    void on_btnSearch_clicked();
};

#endif // WIDGET_FUNCD_WEATHER_H
